#include "../include/string.h"
#include "../include/math.h"

/*
 * Invierte una cadena. El resultado queda en el parametro y tambien es retornado
 */
char * reverse(char *str)
{
	int j,i;
	char aux;

	for(j=0 , i=strlen(str)-1  ;  j<i  ;  j++ , i--)
	{
		aux=str[j];
		str[j]=str[i];
		str[i]=aux;
	}
	str[strlen(str)]=0;

	return str;
}

/*
 * Compara dos cadenas. Devuelve 0 si son iguales, 1 si la primera es mayor a la segunda
 * y -1 si la segunda es mayor a la primera
 */
int strcmp(char *str1, char *str2)
{
	while (*str1!=0 && *str2!=0)
	{
		if (*str1<*str2)
			return -1;
		if (*str1>*str2)
			return 1;
		str1++; str2++;
	}
	if (*str1!=0)
		return -1;
	if (*str2!=0)
		return 1;

	return 0;
}

/*
 * Devuelve la longitud de una cadena
 */
int strlen(char *str)
{
	int i=0;

	while (*(str++)!=0)
		i++;

	return i;
}

/*
 * Convierte un numero a una cadena de caracteres. Se devuelve en el parametro de salida buf
 */
void intToString(char *buf,int num)
{
	int i=0,flag=0;
	if (num==0)
		buf[i++]='0';

	if (num<0)
	{
		flag=1;
		num=num*-1;
	}

	while (num>0)
	{
		buf[i++]=(num % 10)+'0';
		num = num / 10;
	}
	if (flag==1)
	{
		buf[i++]='-';
	}
	buf[i]=0;
	reverse(buf);
}

/*
 * Convierte una cadena a entero. Retorna el entero obtenido
 */
int stringToInt(char *buf)
{
	int i,j;
	long aux;
	long acum;

	acum=0;
	j=0;
	for(i=strlen(buf)-1;i>=0;i--)
	{
		aux=buf[i]-'0';

		if (! (aux>=0 && aux <=9) )
			return -1;
		else
			acum=acum+(aux*(pow(10,j)));

		j++;

	}
	return acum;
}
